#!/bin/bash

name="boost"
type="marcopp"  # c库marco, c++库marcopp

project_name=$type"_"$name  # 项目名称
username="marco"    # 用户名, root执行脚本时,将创建的文件,目录转交为此用户

dst_basic_dir=/home/$username/data/soft/marco_libs   # marco各库共有父目录
dst_project_dir=$dst_basic_dir/$project_name   # 本项目目录, 将不同系统位的库(.so)文件分别创建一个子目录存储

dst_basic_include_dir=$dst_basic_dir/include_$type   # marco各库头文件共有父目录, c库与c++库分别存储(不放到具体某库的项目目录中, 放到上一级, 这样多个库的头文件集中)
dst_include_dir=$dst_basic_include_dir/$name   # 本项目头文件目录

system_bit=`getconf LONG_BIT`  # 系统位数
dst_library_dir=$dst_project_dir/x${system_bit}lib  # 本项目库目录(根据系统位数分别建目录存储)

library_name="lib"$project_name".so" # 库so名称
sys_library_pathname="/usr/lib/"$library_name  # 系统库路径
sys_include_dir=/usr/include/$type    # 系统头文件路径

# --------------------------- 基本目录操作 -----------------------
# marco相关库总目录 marco_libs
if [ ! -d $dst_basic_dir ]; then
	if [ -f $dst_basic_dir ]; then # 是其它类型文件，先删除之
		rm $dst_basic_dir -rf
	fi
	mkdir -p $dst_basic_dir
	chgrp $username $dst_basic_dir
	chown $username $dst_basic_dir
fi

# 本库主目录
if [ ! -d $dst_project_dir ]; then
	if [ -f $dst_project_dir ]; then # 是其它类型文件，先删除之
		rm $dst_project_dir -rf
	fi
	mkdir -p $dst_project_dir
	chgrp $username $dst_project_dir
	chown $username $dst_project_dir
fi


# --------------------------- 头文件操作 -----------------------
# 头文件存储基本目录 include_marcopp或include_marco
if [ ! -d $dst_basic_include_dir ]; then
	if [ -f $dst_basic_include_dir ]; then # 是其它类型文件，先删除之
		rm $dst_basic_include_dir -rf
	fi
	mkdir $dst_basic_include_dir
	chgrp $username $dst_basic_include_dir
	chown $username $dst_basic_include_dir
fi

# 本库头文件存储目标目录
if [ ! -d $dst_include_dir ]; then
	if [ -f $dst_include_dir ]; then # 是其它类型文件，先删除之
		rm $dst_include_dir -rf
	fi
	mkdir $dst_include_dir
	chgrp $username $dst_include_dir
	chown $username $dst_include_dir
fi

# 尝试删除原有头文件，拷贝新文件
rm $dst_include_dir/*.h 2>/dev/null
rm $dst_include_dir/*.hpp 2>/dev/null
cp src/*.h $dst_include_dir/ 2>/dev/null
cp src/*.hpp $dst_include_dir/ 2>/dev/null

# 系统头文件路径下创建符号链接指向头文件目录存储位置
if [ ! -h $sys_include_dir ]; then
	if [ -f $sys_include_dir ]; then # 是其它类型文件，先删除之
		rm $sys_include_dir -rf
	fi
	ln -s $dst_basic_include_dir $sys_include_dir
fi


# --------------------------- 库操作 ---------------------------
# 库存储目标目录
if [ ! -d $dst_library_dir ]; then
	if [ -f $dst_library_dir ]; then # 是其它类型文件，先删除之
		rm $dst_library_dir -rf
	fi
	mkdir $dst_library_dir
	chgrp $username $dst_library_dir
	chown $username $dst_library_dir
fi

# 拷贝到库目录（原来有则自动替换）
cp dist/Release/GNU-Linux/$library_name $dst_library_dir 2>/dev/null

# 系统库路径下创建库文件的符号链接指向库文件存储位置
if [ ! -h $sys_library_pathname ]; then
	if [ -f $sys_library_pathname ]; then # 是其它类型文件，先删除之
		rm $sys_library_pathname -rf
	fi
	ln -s $dst_library_dir/$library_name $sys_library_pathname 2>/dev/null
fi
